Add @releaseDomain watch-event.
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Tue, 6 Sep 2005 18:15:06 +0000 (18:15 +0000)
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Tue, 6 Sep 2005 18:15:06 +0000 (18:15 +0000)
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
tools/xenstore/xenstored_domain.c
tools/xenstore/xenstored_watch.c

index 62c30fa1fada64651049c5c8861bf2fdfc3b0ca9..34278ad9025aa1d9d129823ca2d86313e0c71e98 100644 (file)
@@ -360,6 +360,9 @@ void do_release(struct connection *conn, const char *domid_str)
        }
 
        talloc_free(domain->conn);
+
+       fire_watches(NULL, "@releaseDomain", false);
+
        send_ack(conn, XS_RELEASE);
 }
 
@@ -367,6 +370,7 @@ void domain_cleanup(void)
 {
        xc_dominfo_t dominfo;
        struct domain *domain, *tmp;
+       int released = 0;
 
        list_for_each_entry_safe(domain, tmp, &domains, list) {
                if (xc_domain_getinfo(*xc_handle, domain->domid, 1,
@@ -375,7 +379,11 @@ void domain_cleanup(void)
                    !dominfo.dying && !dominfo.crashed && !dominfo.shutdown)
                        continue;
                talloc_free(domain->conn);
+               released++;
        }
+
+       if (released)
+               fire_watches(NULL, "@releaseDomain", false);
 }
 
 void do_get_domain_path(struct connection *conn, const char *domid_str)
index 804a386868e54e66cc3c13030e9745fca6fbd4d9..ebd13111d5ea9d1b62cc6d1e2c6d0c74357e00e5 100644 (file)
@@ -132,7 +132,7 @@ void fire_watches(struct connection *conn, const char *node, bool recurse)
        struct watch *watch;
 
        /* During transactions, don't fire watches. */
-       if (conn->transaction)
+       if (conn && conn->transaction)
                return;
 
        /* Create an event for each watch.  Don't send to self. */